package com.renu.jdependencyanalyser.data;

import com.renu.jdependencyanalyser.window.model.InnerClassTableItem;
import com.renu.jdependencyanalyser.window.model.InnerMethodTableItem;
import com.renu.jdependencyanalyser.window.model.JarTableItem;

import javax.swing.table.DefaultTableModel;
import java.util.ArrayList;
import java.util.List;

public class TblData <T>{
   private List<T> itemList ;
   private  String []  header ;
   private DefaultTableModel tableModel;


    public TblData(String[] header) {
        this.header = header;
        this.itemList = new ArrayList<>();
        tableModel = new DefaultTableModel(null, header)   ;
    }

    public  void addItem(T item){
        itemList.add(item);
        String [] row = null;
        if (item instanceof JarTableItem){
            row = jarItem2StringArr(item);
        }else if (item instanceof InnerClassTableItem){
            row = InnerClassTableItem2StringArr(item);
        }else if (item instanceof InnerMethodTableItem){
            row = innerMethodTableItem2StringArr(item);
        }
        tableModel.addRow(row);
    }

    private String[] innerMethodTableItem2StringArr(T item) {
        String [] arr = new String[1];
        InnerMethodTableItem i = (InnerMethodTableItem)item;
        arr[0] = i.getMethodSig();
        return arr;
    }

    private String[] InnerClassTableItem2StringArr(T item) {
        String [] arr = new String[2];
        InnerClassTableItem i = (InnerClassTableItem)item;
        arr[0] = i.getJarSig();
        arr[1] = i.getClassSig();
        return arr;
    }

    private String[] jarItem2StringArr(T item) {
        String[] arr = new String[3];
        JarTableItem i = (JarTableItem) item;
        arr[0]= i.getLibSig();
        arr[1]= i.getVulnerabilities();
        arr[2] = i.getUsages();
        return arr;

    }

    public TblData(T[][] itemList, String[] header) {
        this.header = header;
        tableModel = new DefaultTableModel(itemList,header);
    }

    public  void clear(){
        itemList.clear();
        tableModel.setDataVector(null,header);
    }

    public List<T> getItemList() {
        return itemList;
    }

    public void setItemList(List<T> itemList) {
        this.itemList = itemList;
    }

    public String[] getHeader() {
        return header;
    }

    public void setHeader(String[] header) {
        this.header = header;
    }

    public DefaultTableModel getTableModel() {
        return tableModel;
    }

    public void setTableModel(DefaultTableModel tableModel) {
        this.tableModel = tableModel;
    }
}
